package top.jojoace.RequestParam_DTO_Validate.Controller;

import org.hibernate.validator.constraints.Range;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.*;
import top.jojoace.RequestParam_DTO_Validate.dto.PersonDTO;
import top.jojoace.RequestParam_DTO_Validate.dto.ValidationDTO;

import javax.validation.Valid;
import javax.validation.constraints.Max;


/**
 * <h2>@Validated @Valid 启动检验</h2>
 * 使用 @Validated 将会校验 @Max(10) @Range(min = 1, max = 10) @Length(...) 等校验注解
 * 对于@Validated 的位置应添加在其被校验注解赋值的地方，校验注解在方法参数上使用时，则在类上加@Validated。
 * <br><br>
 *
 * <h2>@Valid 可标记在字段上，校验该字段(传输类)内的校验注解,一般用于级联。</h2>
 *
 * <h2>不通过，抛出{@link MethodArgumentNotValidException} 异常</h2>
 */
@Validated
@RestController
public class ValidatedController {
    @GetMapping("/v")
    public Object v(@RequestParam @Max(10) Integer id) {
        return id;
    }

    @GetMapping("/v2")
    public Object v2(@RequestParam @Max(value = 10, message = "id不能超过10") Integer id) {
        return id;
    }

    @GetMapping("/v3")
    public Object v3(@RequestParam @Range(min = 1, max = 10) Integer id) {
        return id;
    }

    @GetMapping("/v4")
    public Object v4(@RequestBody @Valid ValidationDTO validationDTO) {
        return validationDTO;
    }
}
